package cl.uchile.sti.authorization;

import cl.uchile.sti.authorization.dao.*;
import cl.uchile.sti.authorization.model.*;

import java.util.List;

public class App 
{
    public static void main( String[] args )
    {
        cambiarPorSpring.getEntityManager().getTransaction().begin();
       /** insert **/
        Permiso permiso;
        Modulo modulo = new Modulo("modulo1", "http://somewhere.cl/index.xhtml");
        ModuloDAO.save(modulo);
        for(int i=0;i<50;i++){
            permiso= new Permiso("permiso"+i);
            permiso.setModulo(modulo);
            PermisoDAO.save(permiso);
        }
        modulo = new Modulo("modulo2", "http://somewhereDos.cl/index.xhtml");
        ModuloDAO.save(modulo) ;
        for(int i=50;i<100;i++){
            permiso= new Permiso("permiso"+i);
            permiso.setModulo(modulo);
            PermisoDAO.save(permiso);
        }
        modulo = new Modulo("modulo3", "http://somewhereTres.cl/index.xhtml");
        ModuloDAO.save(modulo);
        for(int i=100;i<150;i++){
            permiso= new Permiso("permiso"+i);
            permiso.setModulo(modulo);
            PermisoDAO.save(permiso);
        }
        modulo = new Modulo("modulo4", "http://somewhereCuatro.cl/index.xhtml");
        ModuloDAO.save(modulo);
        for(int i=150;i<200;i++){
            permiso= new Permiso("permiso"+i);
            permiso.setModulo(modulo);
            PermisoDAO.save(permiso);
        }

        Usuario usuario;
        for(int i=0;i<4;i++){
            usuario = new Usuario("user"+(i+1));
            usuario.setNombres("nombre"+(i+1));
            usuario.setApellidoPaterno("apellidoP" + (i + 1));
            usuario.setApellidoMaterno("apellidoM"+(i+1));
            UsuarioDAO.save(usuario);
        }
         /** menus y paginas**/
        Menu menu;
        Pagina pagina;
        menu = new Menu();
        menu.setNombre("menu");
        MenuDao.save(menu);
        long idm=1;
        for(int j=0;j<10;j++){
            pagina=new Pagina("http://somewhere"+j+".cl/index.xhtml","abc"+j,0,idm,false);
            PaginaDao.save(pagina);
        }

        menu = new Menu();
        menu.setNombre("menu");
        menu.setId_padre(idm);
        MenuDao.save(menu);
        idm=2;
        for(int j=10;j<20;j++){
            pagina=new Pagina("http://somewhere"+j+".cl/index.xhtml","abc"+j,0,idm,false);
            PaginaDao.save(pagina);
        }
        menu= new Menu();
        menu.setNombre("menu");
        menu.setId_padre(idm);
        MenuDao.save(menu);
        idm=3;
        for(int j=20;j<30;j++){
            pagina=new Pagina("http://somewhere"+j+".cl/index.xhtml","abc"+j,0,idm,false);
            PaginaDao.save(pagina);
        }
        menu = new Menu();
        menu.setNombre("menu");
        menu.setId_padre(idm);
        MenuDao.save(menu);
        idm=4;
        for(int j=30;j<40;j++){
            pagina=new Pagina("http://somewhere"+j+".cl/index.xhtml","abc"+j,0,idm,false);
            PaginaDao.save(pagina);
        }
        idm=1;
        menu = new Menu();
        menu.setNombre("menu");
        menu.setId_padre(idm);
        MenuDao.save(menu);
        idm=5;
        for(int j=10;j<20;j++){
            pagina=new Pagina("http://somewhere"+j+".cl/index.xhtml","abc"+j,0,idm,false);
            PaginaDao.save(pagina);
        }
        menu = new Menu();
        menu.setNombre("menu");
        MenuDao.save(menu);
        idm=6;
        for(int j=40;j<50;j++){
            pagina=new Pagina("http://somewhere"+j+".cl/index.xhtml","abc"+j,0,idm,false);
            PaginaDao.save(pagina);
        }

        /** select **/

        imprimeMenu(PaginaDao.find(),MenuDao.find(),null);


        /** update
        if(permiso1 != null){
            permiso1.setNombre("permiso2.0.1");
            PermisoDAO.save(permiso1);

             delete
           // PermisoDAO.delete(permiso2);
        }
         **/

        cambiarPorSpring.getEntityManager().getTransaction().commit();
        cambiarPorSpring.getEntityManager().close();
    }


    private static void imprimeMenu(List<Pagina> paginas, List<Menu> menus, Menu menu){
        if(menu==null){
            for(int i=0;i<menus.size();i++){
                if(menus.get(i).getId_padre()==null){
                    System.out.print("<ul IdMenu "+menus.get(i).getId()+">\n");
                    for(int q=0;q<menus.size();q++){
                        if(menus.get(q).getId_padre()==menus.get(i).getId()){
                            imprimeMenu(paginas,menus,menus.get(q));
                        }
                    }
                    for(int q=0;q<paginas.size();q++){
                        if(paginas.get(q).getId_menu()==menus.get(i).getId()){
                            System.out.print("<li IdMenu "+menus.get(i).getId()+">"+paginas.get(q).getEtiqueta()+"</li>\n");
                        }
                    }
                    System.out.print("</ul IdMenu "+menus.get(i).getId()+">\n");
                }
            }
        }else{
            System.out.print("<ul IdMenu "+menu.getId()+">\n");
            for(int i=0;i<menus.size();i++){
                if(menus.get(i).getId_padre()==menu.getId()){
                    imprimeMenu(paginas,menus,menus.get(i));
                }
            }
            for(int q=0;q<paginas.size();q++){
                if(paginas.get(q).getId_menu()==menu.getId()){
                    System.out.print("<li IdMenu "+menu.getId()+">"+paginas.get(q).getEtiqueta()+"</li>\n");
                }
            }
            System.out.print("</ul IdMenu "+menu.getId()+">\n");
        }
    }
}
